package com.example.sqliteviewer;

import android.content.Context;
import android.content.SharedPreferences;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 数据库历史记录管理类
 * 用于保存和读取用户成功打开的数据库文件路径
 */
public class DatabaseHistoryManager {
    private static final String PREF_NAME = "database_history";
    private static final String KEY_HISTORY = "history_paths";
    private static final int MAX_HISTORY_SIZE = 20; // 最大历史记录数量
    
    private final SharedPreferences preferences;
    
    public DatabaseHistoryManager(Context context) {
        preferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }
    
    /**
     * 添加数据库路径到历史记录
     * @param databasePath 数据库文件路径
     */
    public void addToHistory(String databasePath) {
        if (databasePath == null || databasePath.isEmpty()) {
            return;
        }
        
        // 获取当前历史记录
        List<String> historyList = getHistoryList();
        
        // 如果已存在，先移除旧记录（确保最新的在最前面）
        historyList.remove(databasePath);
        
        // 添加到列表开头
        historyList.add(0, databasePath);
        
        // 如果超过最大数量，移除最旧的
        if (historyList.size() > MAX_HISTORY_SIZE) {
            historyList = historyList.subList(0, MAX_HISTORY_SIZE);
        }
        
        // 保存更新后的列表
        saveHistoryList(historyList);
    }
    
    /**
     * 获取历史记录列表
     * @return 数据库路径列表
     */
    public List<String> getHistoryList() {
        Set<String> historySet = preferences.getStringSet(KEY_HISTORY, new HashSet<>());
        return new ArrayList<>(historySet);
    }
    
    /**
     * 清空历史记录
     */
    public void clearHistory() {
        preferences.edit().remove(KEY_HISTORY).apply();
    }
    
    /**
     * 从历史记录中移除指定路径
     * @param databasePath 要移除的数据库路径
     */
    public void removeFromHistory(String databasePath) {
        List<String> historyList = getHistoryList();
        historyList.remove(databasePath);
        saveHistoryList(historyList);
    }
    
    /**
     * 保存历史记录列表
     * @param historyList 要保存的列表
     */
    private void saveHistoryList(List<String> historyList) {
        Set<String> historySet = new HashSet<>(historyList);
        preferences.edit().putStringSet(KEY_HISTORY, historySet).apply();
    }
}